﻿#define _CRT_SECURE_NO_WARNINGS 1
#include"Myset.h"
#include"Mymap.h"


//问题1：key修改的问题
// //解：
// set的iterator也不⽀持修改，我们把set的第⼆个模板参数改成const K即可， RBTree<K, const K, SetKeyOfT > _t; 切记上面的using处也要跟着修改。
// map的iterator不⽀持修改key但是可以修改value，我们把map的第⼆个模板参数pair的第⼀个参数改成const K即可， RBTree<K, pair<const K, V>, MapKeyOfT> _t; 切记上面的using处也要跟着修改。

//问题2：倒着遍历问题
// 解：传根节点找最右节点，支持end()--


void Print(const bao::set<int>& s)
{
	bao::set<int>::const_iterator it = s.end();
	while (it != s.begin())
	{
		--it;
		// 不⽀持修改
		//*it += 2;
		cout << *it << " ";
	}
	cout << endl;
}
void test_set()
{
	bao::set<int> s;
	int a[] = { 4, 2, 6, 1, 3, 5, 15, 7, 16, 14 };
	for (auto e : a)
	{
		s.insert(e);
	}
	for (auto e : s)
	{
		cout << e << " ";
	}
	cout << endl;
	Print(s);
}

void test_map()
{
	bao::map<string, string> dict;
	dict.insert({ "sort", "排序" });
	dict.insert({ "left", "左边" });
	dict.insert({ "right", "右边" });
	dict["left"] = "左边，剩余"; // 修改
	dict["insert"] = "插入"; // 插入+修改
	dict["string"]; // 插入
	bao::map<string, string>::iterator it = dict.begin();
	while (it != dict.end())
	{
		// 不能修改first，可以修改second
		//it->first += 'x';
		//it->second += 'x';
		cout << it->first << ":" << it->second << endl;
		++it;
	}
	cout << endl;
}

int main()
{
	//test_set();
	test_map();
	return 0;
}